/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

Prefadoros.tsoxa = {
	striptizOn: false,
};

Prefadoros.tsoxa.thesiMap = function(thesi) {
	var iseht = thesi - Prefadoros.ego.fetchThesi() + 1;
	return (iseht > 0 ? iseht : iseht + Prefadoros.thesiMax);
}

Prefadoros.tsoxa.setup = function() {
	var h, w1, w2, w3;

	h = $('#pexnidi').innerHeight();
	h -= $('#niofertosArea').outerHeight();
	h -= $('#theatisArea').outerHeight();
	h -= $('#tsoxa').outerHeight();

	$('#tsoxaMain').css({height: parseInt(h) + 'px'});

	// Κεντράρουμε την περιοχή του νότου.

	w1 = $('#tsoxa').innerWidth();
	w2 = $('#tsoxaPektis1').outerWidth();
	w3 = parseInt((w1 - w2) / 2);
	$('#tsoxaPektis1').css({
		left: w3 + 'px',
	}, 1000);

	$('#tsoxa,#niofertosArea,#theatisArea').fadeIn();
	Prefadoros.tsoxa.filaSetup(true);
	Prefadoros.tsoxa.panelSetup(true);

	$('.tsoxaPektisBox').
	on('mouseenter', function(e) {
		var login;

		e.stopPropagation();
		login = $(this).find('.pektisOnomaText').text();
		if (!login) return;
		Pektis.profinfoEpilogi(login, true);
	}).
	on('mouseleave', function(e) {
		var login;

		e.stopPropagation();
		login = $(this).find('.pektisOnomaText').text();
		if (!login) return;
		Pektis.profinfoEpilogi(login, false);
	});
}

Prefadoros.tsoxa.panelSetup = function(arxiko) {
	var tsoxa, button, panel, h, tp1, tp2, t2, h2, a1, a2, ico, src, tr, tl;

	tsoxa = $('#tsoxa');
	panel = $('.tsoxaPanel');
	button = $('.tsoxaPanelButton');

	button = $('.tsoxaPanelButton').css({
		top: (parseInt(tsoxa.outerHeight() / 2) - 20) + 'px',
	});

	tp1 = $('#tsoxaPektis1');
	tp2 = $('#tsoxaPektis2');

	h2 = tp2.outerHeight();
	t2 = tp2.offset().top;
	t1 = (t2 + h2 - tsoxa.offset().top + 3) + 'px';

	// Αν πρόκειται για τακτοποίηση περιοχών θα κάνω εμφανή τα panels
	// και θα τα μετακινήσω.

	if (!arxiko) {
		ico = $('#PLataxia,#CPataxia').working();

		panel.addClass('tsoxaPanelEmfanes');
		a1 = $('#tsoxaPanelLeft').animate({
			top: t1,
			left: '20px',
		});

		// Ο παιδεμός που ακολουθεί οφείλεται στη συμπεριφορά του FF, όπου
		// ενώ είναι ορισμένο μόνο το "right", υπολογίζει μόνος του το "left".

		tr = $('#tsoxaPanelRight');
		tl = parseInt(tr.css('left'));
		if (isNaN(tl)) {
			a2 = tr.animate({
				top: t1,
				right: '20px',
			});
		}
		else {
			tl = parseInt(tr.css('right')) - 20;
			if (tl >= 0) tl = '+=' + tl + 'px';
			else tl = '-=' + (-tl) + 'px';
			a2 = tr.animate({
				top: t1,
				left: tl,
			});
		}
		$.when(a1, a2).done(function() {
			panel.removeClass('tsoxaPanelEmfanes');
			ico.attr({src:'images/cpanel/rubik.png'});
		});
		return;
	}

	panel.css({
		top: (t2 + h2 - tsoxa.offset().top + 3) + 'px',
		height: (tp1.offset().top - t2 - h2 - 60) + 'px',
	});
	$('#tsoxaPanelLeft').css({left: '20px'});
	$('#tsoxaPanelRight').css({right: '20px'});

	button.data('patimeno', false).
	on('mouseenter', function(e) {
		e.stopPropagation();
		$(this).addClass('tsoxaPanelButtonEmfanes');
	}).
	on('mouseleave', function(e) {
		e.stopPropagation();
		$(this).removeClass('tsoxaPanelButtonEmfanes');
	});

	$('#tsoxaPanelButtonLeft').
	on('click', function(e) {
		var patimeno = $(this).data('patimeno');

		Prefadoros.input.apiko(e);
		if (patimeno) {
			$(this).removeClass('strofi270').addClass('strofi90');
			$('#tsoxaPanelLeft').stop().fadeOut();
		}
		else {
			$(this).removeClass('strofi90').addClass('strofi270');
			$('#tsoxaPanelLeft').stop().fadeIn();
		}
		$(this).data('patimeno', !patimeno);
	});

	$('#tsoxaPanelButtonRight').
	on('click', function(e) {
		var patimeno = $(this).data('patimeno');

		Prefadoros.input.apiko(e);
		if (patimeno) {
			$(this).removeClass('strofi90').addClass('strofi270');
			$('#tsoxaPanelRight').stop().fadeOut();
		}
		else {
			$(this).removeClass('strofi270').addClass('strofi90');
			$('#tsoxaPanelRight').stop().fadeIn();
		}
		$(this).data('patimeno', !patimeno);
	});

	panel.on('mouseenter', function(e) {
		e.stopPropagation();
		$(this).addClass('tsoxaPanelEmfanes');
	}).
	on('mouseleave', function(e) {
		e.stopPropagation();
		$(this).removeClass('tsoxaPanelEmfanes');
		$(this).find('.iconButtonOplisate').removeClass('iconButtonOplisate');
	});

	$('.tsoxaPanel').siromeno().pineza(Prefadoros.tsoxa.panelPineza);
}

// Η function που ακολουθεί χρησιμοποιείται για την απόκρυψη των panel
// της τσόχας. Δεν χρησιμοποιούμε ανώνυμη function καθώς η διαδικασία
// της απόκρυψης στήνεται επανειλημμένως.

Prefadoros.tsoxa.panelPineza = function(obj) {
	var id = obj.attr('id');
	if (!id.match(/tsoxaPanel/)) return;
	id = id.replace(/tsoxaPanel/, 'tsoxaPanelButton');
	$('#' + id).trigger('click');
}

Prefadoros.tsoxa.filaSetup = function(arxiko) {
	var f2, l2;

	if (arxiko) {
		$('#tsoxaFila2').css({
			top: '4px',
			right: '20px',
		}).siromeno();
		$('#tsoxaFila3').css({
			top: '4px',
			left: '20px',
		}).siromeno();
		return;
	}

	f2 = $('#tsoxaFila2');
	l2 = parseInt(f2.css('left'));
	if (isNaN(l2)) {
		f2.animate({
			top: '4px',
			right: '20px',
		});
	}
	else {
		l2 = parseInt(f2.css('right')) - 20;
		if (l2 >= 0) l2 = '+=' + l2 + 'px';
		else l2 = '-=' + (-l2) + 'px';
		f2.animate({
			top: '4px',
			left: l2,
		});
	}
	$('#tsoxaFila3').animate({
		top: '4px',
		left: '20px',
	});
}

Prefadoros.tsoxa.striptiz = function() {
	var func, fila = $('#tsoxaFila2,#tsoxaFila3');

	ico = $('#PLstriptiz,#CPstriptiz').working();
	func = Prefadoros.tsoxa.striptizOn ? 'fadeOut' : 'fadeIn';
	Prefadoros.tsoxa.striptizOn = !Prefadoros.tsoxa.striptizOn;
	fila[func](function() {
		ico.attr({src:'images/cpanel/frog.png'});
	});
}

Prefadoros.tsoxa.fyi = function(s) {
	var jql = $('#tsoxaDataKato');

	jql.empty();
	if (s) $('<div>').addClass('tsoxaDataKatoFyi').html(s).appendTo(jql);
}

Prefadoros.tsoxa.fyiError = function(s) {
	Prefadoros.tsoxa.fyi('<span class="lathos">' + s + '</span>');
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

Trapezi.tsoxaJQL = function(thesi) {
	return $('#tsoxa').akrivosEna();
}

Trapezi.tsoxaThesiJQL = function(thesi) {
	return $('#tsoxaPektis' + thesi).akrivosEna();
}

Trapezi.tsoxaThesiMapJQL = function(thesi) {
	return $('#tsoxaPektis' + Prefadoros.tsoxa.thesiMap(thesi)).akrivosEna();
}

Trapezi.tsoxaClearDOM = function() {
	var thesi, jql;
	$('#tsoxaDataPano,#tsoxaDataKato,.tsoxaPanel').empty();
	$('.tsoxaPanel').pineza(Prefadoros.tsoxa.panelPineza);
	for (thesi in Prefadoros.thesiValid) {
		Trapezi.tsoxaThesiClearDOM(thesi);
	}
	jql = $('#tsoxa');
	jql.removeClass('tsoxaKeni trapeziPrive');
	jql.find('.tsoxaMaziIcon').remove();
	$('#theatisArea,.tsoxaFila').empty();
	Trapezi.pexnidiClearDOM();
	return jql;
}

Trapezi.pexnidiClearDOM = function() {
	$('.tsoxaDilosiBox').removeClass('tsoxaDilosiPaso tsoxaDilosiSolo ' +
		'tsoxaSimetoxiPaso tsoxaSimetoxiPezo tsoxaSimetoxiMazi').css({display: 'none'}).empty();
	$('.tsoxaAgora').removeClass('tsoxaAgoraYes tsoxaAgoraPaso').empty();
	$('.pexnidiIcon').remove();
	Prefadoros.tsoxa.fyi();
	return this;
}

Trapezi.tsoxaThesiClearDOM = function(thesi) {
	var jql = Trapezi.tsoxaThesiJQL(thesi);
	jql.find('.pektisBox').removeClass('pektisAlitevi pektisOffline oxiApodoxi theatis epomenos diagramisi');
	jql.find('.pektisOnomaText').empty();
	jql.find('.tsoxaKapikia').empty();
	jql.find('.tsoxaAgora').empty();
	jql.find('.tsoxaDilosiBox').empty();
	jql.find('.tsoxaBazaArea').empty();
	jql.find('.pektisAxiomaIcon').axiomaIconFixDOM();
	jql.find('.tsoxaProfinfoIcon').css({display: 'none'}).off('mouseenter mouseleave click');
	jql.find('.tsoxaPektisPhotoIcon').css({display: 'none'}).off('mouseenter mouseleave click');
	jql.find('.tsoxaPektisPhoto').css({display: 'none'}).off('mouseenter mouseleave').
		data('monima', false).attr({src:'images/misc/noImage.png'});
}

Trapezi.tsoxaTheatisAreaClearDOM = function(thesi) {
	$('#tsoxaTheatisArea').empty();
}

Trapezi.prototype.tsoxaDOM = function() {
	var thesi, jql;

	Trapezi.tsoxaClearDOM();
	if (this.isEgo()) {
		$('#tsoxa').
			idiotikotitaFixDOM(this).
			stisimoFixDOM(this);
	}

	this.tsoxaDataPanoFixDOM();
	for (thesi in Prefadoros.thesiValid) {
		this.tsoxaThesiFixDOM(thesi);
	}

	this.tsoxaTheatisAreaFixDOM();
	if (this.isDianomi()) this.tsoxaPexnidiDOM();
	else this.tsoxaStisimoDOM();

	return this;
}

Trapezi.prototype.siraDOM = function() {
	this.
	dealerDOM().
	protosDOM().
	epomenosDOM();

	return this;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

// Το «γήπεδο» είναι η ελεύθερη περιοχή τής τσόχας, δηλαδή το μέρος τής τσόχας
// που βρίσκεται οριζοντίως ανάμεσα από το νότο και τους άλλους δύο παίκτες.
// Σ' αυτή την περιοχή εμφανίζουμε div με id "PXgipedo" το οποίο περιέχει
// στοιχεία που αφορούν στην εκάστοτε φάση τού παιχνιδιού, π.χ. κατά την
// επαναδιανομή μετά από δηλώσεις "ΠΑΣΟ" των τριών παικτών εμφανίζονται τα
// φύλλα του τζόγου, κατά την εκτέλεση εμφανίζονται τα φύλλα της τρέχουσας
// μπάζας κλπ.

Trapezi.gipedoDOM = {
	trapezi: null,

	fasi: null,

	same: function(trapezi) {
		var nodif = true;

		if (trapezi.kodikos != Trapezi.gipedoDOM.trapezi) nodif = false;
		if (trapezi.fasi != Trapezi.gipedoDOM.fasi) nodif = false;
		if (nodif) return true;

		Trapezi.gipedoDOM.trapezi = trapezi.kodikos;
		Trapezi.gipedoDOM.fasi = trapezi.fasi;
		return false;
	},
};

Trapezi.prototype.gipedoDOM = function() {
	var gipedo = null;

	if (Trapezi.gipedoDOM.same(this)) return this;

	$('#PXgipedo').remove();
	gipedo = $('<div>').attr({id: 'PXgipedo'});

	switch (this.fasi) {
	case 'ΔΗΛΩΣΗ':
		$('<img>').attr({
			src: 'images/misc/tzogos.png',
			title: 'Τζόγος',
		}).addClass('gipedoTzogosIcon').appendTo(gipedo);
		break;
	}

	$('#tsoxa').append(gipedo);
	return this;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

// Όλα τα μηνύματα τού παιχνιδιού εμφανίζονται σε div με id "PXminima", το οποίο
// είναι μια ορθογώνια περιοχή εντός γηπέδου, δηλαδή της διαθέσιμης περιοχής της
// τσόχας πάνω από τα φύλλα του νότου, όμως το κάθε μήνυμα μπορεί να έχει τα δικά
// του CSS χαρακτηριστικά, μέσω της αντίστοιχης κλάσης, π.χ. "minimaAlagi" κλπ.
// Μόνο ένα μήνυμα μπορεί να υφίσταται σε κάθε χρονική στιγμή, επομένως κάθε φορά
// που ετοιμάζουμε ένα νέο μήνυμα, μπορούμε με ασφάλεια να διαγράψουμε τυχόν υπάρχον
// μήνυμα.

Trapezi.minimaDOM = {
	trapezi: null,

	fasi: null,

	epomenos: null,

	thesi: null,

	same: function(trapezi) {
		var nodif = true;

		if (trapezi.kodikos != Trapezi.minimaDOM.trapezi) nodif = false;
		else if (trapezi.fasi != Trapezi.minimaDOM.fasi) nodif = false;
		else if (trapezi.epomenos != Trapezi.minimaDOM.epomenos) nodif = false;
		else if (Prefadoros.ego.sinedria.thesi != Trapezi.minimaDOM.thesi) nodif = false;
		if (nodif) return true;

		Trapezi.minimaDOM.trapezi = trapezi.kodikos;
		Trapezi.minimaDOM.fasi = trapezi.fasi;
		Trapezi.minimaDOM.epomenos = trapezi.epomenos;
		Trapezi.minimaDOM.thesi = Prefadoros.ego.sinedria.thesi;
		return false;
	},
};

Trapezi.prototype.minimaDOM = function() {
	if (Trapezi.minimaDOM.same(this)) return this;
	$('#PXminima').remove();

	switch (this.fasi) {
	case 'ΣΤΗΣΙΜΟ':
		this.minimaStisimoDOM();
		break;
	case 'ΔΗΛΩΣΗ':
		this.minimaDilosiDOM();
		break;
	case 'FLOP':
		this.minimaFlopDOM();
		break;
	case 'ΑΛΛΑΓΗ':
		this.minimaAlagiDOM();
		break;
	case 'ΣΟΛΟ':
		this.minimaSoloDOM();
		break;
	case 'ΣΥΜΜΕΤΟΧΗ1':
	case 'ΣΥΜΜΕΤΟΧΗ2':
	case 'ΣΥΜΜΕΤΟΧΗ3':
		this.minimaSimetoxiDOM();
		break;
	case 'ΕΚΤΕΛΕΣΗ':
		break;
	case 'ΠΛΗΡΩΜΗ':
		this.minimaPliromiDOM();
		break;
	default:
		globals.fatal('Trapezi.minimaDOM: ' + this.fasi + ': απρόβλεπτη φάση');
	}

	return this;
}

// Η μέθοδος "minimaStisimoDOM" εμφανίζει μήνυμα σχετικό με το
// στήσιμο της παρτίδας.

Trapezi.prototype.minimaStisimoDOM = function() {
	var domel, minima;

	domel = $('<div>').attr({id: 'PXminima'}).addClass('minimaDilosi');
	if (Prefadoros.ego.isPektis()) minima = 'Επιλέξτε τα χαρακτηριστικά της παρτίδας και πιέστε ' +
		'το πλήκτρο αποδοχής <img class="minimaIcon" src="images/cpanel/check.png" />, ' +
		'ή <img class="minimaIcon" src="images/cpanel/go.jpg" /> για να ξεκινήσετε την παρτίδα.'
	else minima = 'Οι παίκτες του τραπεζιού διαπραγματεύονται τα χαρακτηριστικά τής παρτίδας. ' +
		'Παρακαλώ περιμένετε…';
	domel.html(minima).appendTo('#tsoxa').anadisi();
	return this;
}

// Η μέθοδος "minimaDilosiDOM" εμφανίζει μήνυμα σχετικό με τον παίκτη
// που έχει το λόγο κατά τη φάση της πλειοδοσίας τής αγοράς.

Trapezi.prototype.minimaDilosiDOM = function() {
	var
	domel,
	minima,
	ante = 'Ο παίκτης ',
	sas = Prefadoros.ego.isPektis() ? 'σας' : 'του παίκτη που παρακολουθείτε';
	post = ' έχει το λόγο. Παρακαλώ περιμένετε…';

	domel = $('<div>').attr({id: 'PXminima'}).addClass('minimaDilosi');

	if (Prefadoros.ego.isAristera(this.epomenos)) minima = ante + 'στα δεξιά ' + sas + post;
	else if (Prefadoros.ego.isDexia(this.epomenos)) minima = ante + 'στα αριστερά ' + sas + post;
	else if (Prefadoros.ego.isPektis()) minima = 'Οι συμπαίκτες σας περιμένουν τη δήλωσή σας…';
	else minima = ante + 'που παρακολουθείτε' + post;

	domel.text(minima).appendTo('#tsoxa').anadisi();
	return this;
}

// Η μέθοδος "minimaFlopDOM" εμφανίζει μήνυμα σχετικό με την εμφάνιση τού
// τζόγου μετά από δήλωση "ΠΑΣΟ" και των τριών παικτών.

Trapezi.prototype.minimaFlopDOM = function() {
	var aristera, dexia, nextDealer, sas = Prefadoros.ego.isPektis() ? 'σας' : 'του παίκτη που παρακολουθείτε';

	aristera = 'Και οι τρεις παίκτες ';
	aristera += Prefadoros.ego.isPektis() ? 'δηλώσατε' : 'δήλωσαν';
	aristera += ' «ΠΑΣΟ», επομένως θα γίνει νέα διανομή.';
		
	nextDealer = this.dealer.epomenosPektis();
	if (Prefadoros.ego.isAristera(nextDealer)) dexia = 'Ο παίκτης στα δεξιά ' + sas + ' μοιράζει';
	else if (Prefadoros.ego.isDexia(nextDealer)) dexia = 'Ο παίκτης στα αριστερά ' + sas + ' μοιράζει';
	else if (Prefadoros.ego.isPektis()) dexia = 'Μοιράζετε';
	else dexia ='Ο παίκτης που παρακολουθείτε μοιράζει';
	dexia += ' φύλλα. Παρακαλώ περιμένετε…';

	$('<div>').attr({id: 'PXminima'}).addClass('minimaFlop').
	append($('<div>').addClass('minimaFlopAristera').text(aristera)).
	append($('<div>').addClass('minimaFlopDexia').text(dexia)).
	appendTo('#tsoxa').anadisi();

	return this;
}

// Η μέθοδος "minimaAlagiDOM" εμφανίζει μήνυμα σχετικό με την αλλαγή φύλλων και
// την επιλογή αγοράς από τον τζογαδόρο.

Trapezi.prototype.minimaAlagiDOM = function() {
	var
	domel,
	minima,
	pios,
	ante = 'Ο παίκτης ',
	sas = Prefadoros.ego.isPektis() ? 'σας' : 'του παίκτη που παρακολουθείτε',
	post = ' πλειοδότησε, κέρδισε την αγορά και αυτή τη στιγμή αλλάζει φύλλα. Παρακαλώ περιμένετε την αγορά του…';

	domel = $('<div>').attr({id: 'PXminima'}).addClass('minimaAlagi');

	if (Prefadoros.ego.isAristera(this.tzogadoros)) minima = ante + 'στα δεξιά ' + sas + post;
	else if (Prefadoros.ego.isDexia(this.tzogadoros)) minima = ante + 'στα αριστερά ' + sas + post;
	else if (Prefadoros.ego.oxiPektis()) minima = ante + 'που παρακολουθείτε' + post;
	else minima = 'Κάντε κλικ στα δύο φύλλα που θέλετε να ' +
		'ξεσκαρτάρετε και κατόπιν επιλέξτε την αγορά σας από το πάνελ που ' +
		'θα εμφανιστεί, ή βάλτε μέσα την αγορά σας κάνοντας κλικ στο εικονίδιο ' +
		'«ΣΟΛΟ». Οι συμπαίκτες σας περιμένουν…';

	domel.text(minima).appendTo('#tsoxa').anadisi();
	return this;
}

// Η μέθοδος "minimaSoloDOM" εμφανίζει μήνυμα σχετικό με την απόφαση τού
// του τζογαδόρου να βάλει σόλο μέσα την αγορά του.

Trapezi.prototype.minimaSoloDOM = function() {
	var
	domel,
	minima,
	pios,
	ante = 'Ο παίκτης ',
	sas = Prefadoros.ego.isPektis() ? 'σας' : 'του παίκτη που παρακολουθείτε',
	post = ' έβαλε σόλο μέσα την αγορά του στα «' + this.ekinisi.lektiko() +
		'». Παρακαλώ περιμένετε νέα διανομή…';

	domel = $('<div>').attr({id: 'PXminima'}).addClass('minimaAlagi');

	if (Prefadoros.ego.isAristera(this.tzogadoros)) minima = ante + 'στα δεξιά ' + sas + post;
	else if (Prefadoros.ego.isDexia(this.tzogadoros)) minima = ante + 'στα αριστερά ' + sas + post;
	else if (Prefadoros.ego.oxiPektis()) minima = ante + 'που παρακολουθείτε' + post;
	else minima = 'Βάλατε σόλο μέσα την αγορά σας στα «' + this.ekinisi.lektiko() +
		'». Περιμένετε τη νέα διανομή…';

	domel.text(minima).appendTo('#tsoxa').anadisi();
	return this;
}

// Η μέθοδος "minimaSimetoxiDOM" εμφανίζει μήνυμα σχετικό με τις δηλώσεις
// συμμετοχής ή μη των αμυνομένων.

Trapezi.prototype.minimaSimetoxiDOM = function() {
	var
	domel,
	minima,
	ante = 'Ο παίκτης ',
	sas = Prefadoros.ego.isPektis() ? 'σας' : 'του παίκτη που παρακολουθείτε',
	post = ' σκέφτεται αν θα διεκδικήσει τις μπάζες του και με ποιον τρόπο. ' +
		'Παρακαλώ περιμένετε…';

	domel = $('<div>').attr({id: 'PXminima'}).addClass('minimaSimetoxi');

	if (Prefadoros.ego.isAristera(this.epomenos)) minima = ante + 'στα δεξιά ' + sas + post;
	else if (Prefadoros.ego.isDexia(this.epomenos)) minima = ante + 'στα αριστερά ' + sas + post;
	else if (Prefadoros.ego.isPektis()) minima = 'Αποφασίστε αν και με ποιον τρόπο θα διεκδικήσετε τις ' +
		'μπάζες σας στην αγορά και κάντε κλικ στο σχετικό πλήκτρο. Οι συμπαίκτες σας περιμένουν…';
	else minima = ante + 'που παρακολουθείτε' + post;

	domel.text(minima).appendTo('#tsoxa').anadisi();
	return this;
}

// Η μέθοδος "minimaPLiromiDOM" εμφανίζει μήνυμα σχετικό με την πληρωμή
// που βρίσκεται σε εξέλιξη.

Trapezi.prototype.minimaPliromiDOM = function() {
	$('<div>').attr({id: 'PXminima'}).addClass('minimaPliromi').
	text('Πληρωμή σε εξέλιξη. Παρακαλώ περιμένετε…').appendTo('#tsoxa').anadisi();
	return this;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

Trapezi.prototype.tsoxaDataPanoFixDOM = function() {
	var data, tpl;

	$('#tsoxaDataPano').empty().append('Τραπέζι: <span class="entono ble" title="Κωδικός τραπεζιού">' +
		this.kodikos + '</span>, <span class="entono" title="Κάσα">' + (this.kasa() * 3) +
		'</span> # <span class="entono" title="Υπόλοιπο κάσας">' + this.ipolipo() + '</span>');

	$('#tsoxaPanelLeft').empty().pineza(Prefadoros.tsoxa.panelPineza).
	append($('<div>').attr({id: 'PNdata'}).
		append($('<div>').attr({id: 'PNtrapezi'}).text(this.kodikos)).
		append($('<div>').text((this.kasa() * 3) + ' # ' + this.ipolipo()))).
	append($('<div>').attr({id: 'PNkasaPanel'}).
		append($('<img>').attr({
			src: 'images/velaki/kasaPano.png',
			title: 'Αύξηση κάσας',
		}).on('click', function(e) {
			var ico = $(this);
			Prefadoros.input.apiko(e);
			$(this).working();
			Client.node('kasaAlagi', 'alagi=10', function(rsp) {
				Client.fyi.spano(rsp);
				ico.attr({src: 'images/velaki/kasaPano.png'});
			});
		})).append(' ').
		append($('<img>').attr({
			src: 'images/velaki/kasaKato.png',
			title: 'Μείωση κάσας',
		}).on('click', function(e) {
			var ico = $(this);
			Prefadoros.input.apiko(e);
			$(this).working();
			Client.node('kasaAlagi', 'alagi=-10', function(rsp) {
				Client.fyi.spano(rsp);
				ico.attr({src: 'images/velaki/kasaKato.png'});
			});
		})));
	$('#PNkasaPanel').find('img').addClass('tsoxaPanelIcon iconButton');

	return this;
}

Prefadoros.tsoxa.panelDixe = function() {
	if (Prefadoros.ego.isPektis() || Prefadoros.ego.pektis.isEpoptis()) {
		$('#PNkasaPanel').css({display: 'block'});
	}
	else {
		$('#PNkasaPanel').css({display: 'none'});
	}
}

Trapezi.prototype.tsoxaThesiFixDOM = function(thesi) {
	Trapezi.tsoxaThesiMapJQL(thesi).tsoxaThesiFixDOM(this, thesi);
}

jQuery.fn.tsoxaThesiFixDOM = function(trapezi, thesi) {
	var login, sinedria, pektis;

	login = trapezi.pektis(thesi);
	sinedria = Skiniko.isSinedria(login);
	pektis = Skiniko.isPektis(login);

	return $(this).akrivosEna().each(function() {
		var boxjql, onomajql, pinfojql, photojql, piconjql, loginPrev;

		boxjql = $(this).find('.pektisBox').removeClass('pektisAlitevi pektisOffline theatis');
		boxjql.find('.stisimoEndixiContainer').empty();

		onomajql = boxjql.find('.pektisOnomaText');
		loginPrev = onomajql.text();

		boxjql.off('click');
		if (Prefadoros.ego.sinedria.isPektis() || (Prefadoros.tsoxa.thesiMap(thesi) == 1))
			boxjql.css({cursor: 'auto'}).removeAttr('title');
		else boxjql.css({cursor: 'crosshair'}).attr({title: 'Αλλαγή θέσης θέασης'}).on('click', function(e) {
			Prefadoros.input.apiko(e);
			Client.node('thesiTheasis', 'thesi=' + thesi, function(rsp) {
				if (rsp) Client.fyi.spano(rsp);
			});
		});

		pinfojql = boxjql.find('.tsoxaProfinfoIcon');
		photojql = boxjql.find('.tsoxaPektisPhoto');
		piconjql = boxjql.find('.tsoxaPektisPhotoIcon');

		if (!login) {
			onomajql.empty();
			boxjql.find('.pektisAxiomaIcon').axiomaIconFixDOM();
			pinfojql.css({display: 'none'}).off('mouseenter mouseleave click');
			piconjql.css({display: 'none'}).off('mouseenter mouseleave click');
			photojql.css({display: 'none'}).off('mouseenter mouseleave').
				data('monima', false).attr({src:'images/misc/noImage.png'});
			return;
		}

		if (login != loginPrev) {
			var opc = 0.1;

			onomajql.text(login);
			photojql.data('monima', true);
			pinfojql.off('mouseenter mouseleave click').css({display: 'inline'}).
			on('mouseenter', function(e) {
				$(this).animate({opacity: 1}, 100);
				photojql.css({opacity: photojql.data('monima') ? 1 : opc});
			}).
			on('mouseleave', function(e) {
				$(this).animate({opacity: 0}, 100);
				photojql.css({opacity: photojql.data('monima') ? opc : 0});
			}).
			on('click', function(e) {
				Pektis.profinfo(e, this, login);
			});

			piconjql.off('mouseenter mouseleave click').css({display: 'inline'}).
			on('mouseenter', function(e) {
				$(this).animate({opacity: 1}, 100);
				photojql.css({opacity: photojql.data('monima') ? 1 : opc});
			}).
			on('mouseleave', function(e) {
				$(this).animate({opacity: 0}, 100);
				photojql.css({opacity: photojql.data('monima') ? opc : 0});
			}).
			on('click', function(e) {
				Prefadoros.input.apiko(e);
				if (photojql.data('monima')) {
					photojql.fadeTo(100, 0);
					photojql.data('monima', false);
					$(this).attr({title: 'Κλικ για εμφάνιση φωτογραφίας'});
				}
				else {
					photojql.attr({src: Client.pektisPhotofile(login, true)}).fadeTo(100, 1);
					photojql.data('monima', true);
					$(this).attr({title: 'Κλικ για απόκρυψη φωτογραφίας'});
				}
			});

			photojql.data('monima', true).
			attr({src: Client.pektisPhotofile(login)}).
			css({display: 'inline', opacity: opc}).
			off('mouseenter mouseleave').
			on('mouseenter', function(e) {
				$(this).css({opacity: photojql.data('monima') ? 1 : opc});
			}).
			on('mouseleave', function(e) {
				$(this).css({opacity: photojql.data('monima') ? opc : 0});
			});
		}

		if (!sinedria) boxjql.addClass('pektisOffline');
		else if (sinedria.trapezi != trapezi.kodikos) boxjql.addClass('pektisAlitevi');

		boxjql.
		apodoxiFixDOM(trapezi, thesi).
		pektisTheatisFixDOM(login).
		pektisOnlineFixDOM(login).
		pektisSxesiFixDOM(login, true).
		pektisAxiomaFixDOM(login, true).
		pektisKatastasiFixDOM(login);

	});
}

Trapezi.prototype.tsoxaTheatisAreaFixDOM = function() {
	var login;
	Trapezi.tsoxaTheatisAreaClearDOM();
	for (login in this.theatis) {
		this.tsoxaTheatisAddDOM(login);
	}

	return this;
}

Trapezi.prototype.tsoxaTheatisAddDOM = function(login) {
	Skiniko.fetchPektis(login).pektisDOM('SH').pektisFixDOM(login).
	addClass('theatis').prependTo($('#theatisArea'));
	return this;
}

Trapezi.prototype.trapeziTheatisJQL = function(login) {
	var slogin = this.pektis.jqsel();
	return $('#SH' + slogin);
}

Trapezi.prototype.tsoxaTheatisDelDOM = function(login) {
	this.trapeziTheatisJQL(login).fadeOut(function() {
		$(this).remove();
	});
	return this;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

// Η μέθοδος "energiaDOM" καλείται μετά την ένταξη νέας ενέργειας στο τραπέζι και
// στόχο έχει την ενημέρωση του DOM όσον αφορά στις αλλαγές που προκαλούνται από
// τη συγκεκριμένη ενέργεια. Κάθε είδος ενέργειας έχει τη δικιά της μέθοδο και
// η "energiaDOM" είναι ουσιαστικά ένα είδος router προς αυτές τις επιμέρους
// μεθόδους που εφαρμόζονται στο τραπέζι και δέχονται ως παράμετρο την ίδια
// την ένέργεια.
//
// Η μέθοδος μπορεί να κληθεί και χωρίς συγκεκριμένη ενέργεια. Σ' αυτή την περίπτωση
// διατρέχονται όλες οι ενέργειες της τελευταίας διανομής του τραπεζιού και για κάθε
// ενέργεια γίνονται οι σχετικές αλλαγές στο DOM.

Trapezi.prototype.energiaDOM = function(energia) {
	var dianomi, i;

	// Αν έχει δοθεί συγκεκριμένη ενέργεια, εφαρμόζεται η προσήκουσα μέθοδος
	// για να γίνουν οι σχετικές αλλαγές στο DOM.

	if (energia) {
		if (Trapezi.energiaDOMMap.hasOwnProperty(energia.idos)) {
			Trapezi.energiaDOMMap[energia.idos].call(this, energia);
		}

		return this;
	}

	// Δεν δόθηκε ενέργεια, επομένως θα διατρέξουμετις ενέργειες της τελευταίας
	// διανομής και θα εφαρμόσουμε την μέθοδο για κάθε μια από αυτές τις ενέργειες.

	if (!this.dianomi.length) return this;
	dianomi = this.dianomi[this.dianomi.length - 1];
	if (!dianomi.energia.length) return this;

	for (i = 0; i < dianomi.energia.length; i++) {
		this.energiaDOM(dianomi.energia[i]);
	}

	return this;
}

Trapezi.energiaDOMMap = {
	'ΔΙΑΝΟΜΗ': function(energia) {
		var thesi;

		Trapezi.pexnidiClearDOM();
		for (thesi in Prefadoros.thesiValid) {
			this.fila[thesi].taxinomisi().xartosiaDOM(Prefadoros.tsoxa.thesiMap(thesi));
		}

		return this;
	},

	'ΔΗΛΩΣΗ': function(energia) {
		var
		dilosi = (new Dilosi()).string2dilosi(energia.data),
		pbox = $('#tsoxaPektis' + Prefadoros.tsoxa.thesiMap(energia.pektis)),
		dbox = pbox.find('.tsoxaDilosiBox'),
		abox = pbox.find('.tsoxaAgora'),
		thesi;

		dbox.css({display: 'block'});
		if (dilosi.isPaso()) {
			dbox.addClass('tsoxaDilosiPaso').text('ΠΑΣΟ');
			if (this.dilosi.hasOwnProperty(energia.pektis))
				abox.addClass('tsoxaAgoraPaso').removeClass('tsoxaAgoraYes').
					html(this.dilosi[energia.pektis].lektikoDOM());
			return this;
		}

		abox.addClass('tsoxaAgoraYes').html(this.dilosi[energia.pektis].lektikoDOM());

		for (thesi in Prefadoros.thesiValid) {
			if (thesi == this.tzogadoros) continue;
			if (!this.dilosi.hasOwnProperty(thesi)) continue;
			pbox = $('#tsoxaPektis' + Prefadoros.tsoxa.thesiMap(thesi));
			abox = pbox.find('.tsoxaAgora');
			abox.removeClass('tsoxaAgoraYes');
			if (this.dilosi[thesi].oxiGrafio()) continue;

			dbox = pbox.find('.tsoxaDilosiBox');
			dbox.css({display: 'none'});
			abox.addClass('tsoxaAgoraPaso');
		}

		return this;
	},

	// Διαχειριζόμαστε ενέργεια τύπου "ΑΓΟΡΑ" και θα πρέπει να επανεμφανίσουμε
	// τα φύλλα του τζογαδόρου.

	'ΑΓΟΡΑ': function(energia) {
		this.fila[this.tzogadoros].xartosiaDOM(Prefadoros.tsoxa.thesiMap(this.tzogadoros));
	},

	'ΣΥΜΜΕΤΟΧΗ': function(energia) {
		this.dixeSimetoxi();
	},
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

Trapezi.prototype.xartosiaDOM = function() {
	var thesi;

	for (thesi in Prefadoros.thesiValid) {
		if (!this.hasOwnProperty('fila')) continue;
		if (!this.fila.hasOwnProperty(thesi)) continue;
		this.fila[thesi].xartosiaDOM(Prefadoros.tsoxa.thesiMap(thesi));
	}

	return this;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

Trapezi.prototype.tsoxaStisimoDOM = function() {
	$('#tsoxaPektis1').removeClass('tsoxaPektisSteno');
	$('#tsoxaFila1').css({display: 'none'}).empty();
	return this;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

Trapezi.prototype.tsoxaPexnidiDOM = function() {
	$('#tsoxaPektis1').addClass('tsoxaPektisSteno');
	$('#tsoxaFila1').css({display: 'block'});
	return this;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

Trapezi.prototype.dealerDOM = function() {
	$('#PXdealer').remove();
	if (!this.dealer) return this;

	$('#tsoxaPektis' + Prefadoros.tsoxa.thesiMap(this.dealer)).find('.pektisBox').
	append($('<img>').addClass('pexnidiIcon').attr({
		id: 'PXdealer',
		src: 'images/cpanel/prefadoros.png',
		title: 'Dealer',
	}));
	return this;
}

Trapezi.prototype.protosDOM = function() {
	$('#PXprotos').remove();
	if (!this.dealer) return this;

	$('#tsoxaPektis' + Prefadoros.tsoxa.thesiMap(this.dealer.epomenosPektis())).find('.pektisBox').
	append($('<img>').addClass('pexnidiIcon').attr({
		id: 'PXprotos',
		src: 'images/endixi/protos.png',
		title: 'Παίζει πρώτος',
	}));
	return this;
}

Trapezi.prototype.epomenosDOM = function() {
	$('.epomenos').removeClass('epomenos');
	Prefadoros.epomenos.ipenthimisiClear();
	if (!this.epomenos) return this;

	$('#tsoxaPektis' + Prefadoros.tsoxa.thesiMap(this.epomenos)).find('.pektisBox').
	addClass('epomenos');

	if (Prefadoros.ego.oxiPektis()) return this;
	if (Prefadoros.ego.sinedria.thesi != this.epomenos) return this;

	Prefadoros.epomenos.timer = setTimeout(Prefadoros.epomenos.ipenthimisi, Prefadoros.epomenos.dioriaMikri);
	return this;
}

// Το singleton "epomenos" περιέχει data και functions που χρησιμοποιούνται κυρίως
// για τα ηχητικά σήματα που αφορούν στον παίκτη που έχει σειρά να κάνει την επομένη
// ενέργεια στο παιχνίδι. Πρόκειται για μια σειρά διαφορετικών ηχητικών σημάτων, από
// τα ηπιότερα προς τα εκνευρισκότερα, τα οποία ηχούν σε διάφορους χρόνους εφόσον ο
// παίκτης που έχει σειρά να εκτελέσει την επομένη ενέργεια καθυστερεί. Παράλληλα με
// το ηχητικό σήμα έχουμε και στιγμιαία αλλοίωση του χρώματος του περιγράμματος τής
// περιοχής τού συγκεκριμένου παίκτη.

Prefadoros.epomenos = {
	dioriaMikri: 10000,

	dioriaMegali: 15000,

	timer: null,

	ipenthimisiClear: function() {
		if (Prefadoros.epomenos.timer) clearTimeout(Prefadoros.epomenos.timer);
		Prefadoros.epomenos.timer = null;
	},

	ipenthimisi: function() {
		var ajql = $('.pektisAnamoniIcon');

		Client.fyi.kato('Οι συμπαίκτες σας περιμένουν…');
		Client.sound.play('kanarini.ogg');
		Prefadoros.epomenos.plesioFlush();
		Prefadoros.epomenos.timer = setTimeout(function() {
			Client.fyi.kato('Οι συμπαίκτες σας περιμένουν!');
			Client.sound.play('korna1.ogg');
			ajql.attr({src: 'images/working/xroma.gif'});
			Prefadoros.epomenos.plesioFlush();
			Prefadoros.epomenos.timer = setTimeout(function() {
				Prefadoros.tsoxa.fyi('Οι συμπαίκτες σας περιμένουν!!!');
				Client.sound.play('kabanaki.ogg');
				ajql.attr({src: 'images/endixi/nevrikos.gif'});
				Prefadoros.epomenos.plesioFlush();
				Prefadoros.epomenos.timer = setTimeout(function() {
					Prefadoros.tsoxa.fyiError('Είναι η σειρά σας, μήπως ξεχαστήκατε;');
					Client.sound.play('korna.ogg');
					ajql.attr({src: 'images/endixi/nevra.gif'});
					Prefadoros.epomenos.plesioFlush();
					Prefadoros.epomenos.timer = setTimeout(function() {
						Prefadoros.tsoxa.
						fyiError('<b>Κάντε κάτι, οι συμπαίκτες σας περιμένουν!!!</b>');
						Client.sound.play('dalika.ogg');
						ajql.attr({src: 'images/endixi/rologaki.gif'});
						Prefadoros.epomenos.plesioFlush();
						Prefadoros.epomenos.ipenthimisiClear();
					}, Prefadoros.epomenos.dioriaMegali);
				}, Prefadoros.epomenos.dioriaMegali);
			}, Prefadoros.epomenos.dioriaMegali);
		}, Prefadoros.epomenos.dioriaMikri);
	},

	plesioFlush: function() {
		$('.epomenos').finish().css({
			borderColor: '#FF0000',
		}).animate({
			borderColor: '#FFD700',
		}, 800, function() {
			// Πρέπει να αφαιρεθεί το χρώμα που άλλαξε, αλλιώς θα μείνει.
			$(this).css({borderColor: ''});
		});
	}
};

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

// Ακολουθούν διεργασίες σχετικές με την εκάστοτε φάση του τραπεζιού. Αυτές οι
// διεργασίες αφορούν σε όλους τους παίκτες και θεατές που σχετίζονται με το
// τραπέζι και λαμβάνουν χώρα αφού έχει διαμορφωθεί κατάλληλα η τσόχα, έχουν
// εμφανιστεί τυχόν μηνύματα, φύλλα κλπ.

Trapezi.prototype.fasiDOM = function() {
	switch (this.fasi) {
	case 'ΣΤΗΣΙΜΟ':
		break;
	case 'ΔΗΛΩΣΗ':
		this.fasiDilosiDOM();
		break;
	case 'FLOP':
		this.fasiFlopDOM();
		break;
	case 'ΑΛΛΑΓΗ':
		this.fasiAlagiDOM();
		break;
	case 'ΣΟΛΟ':
		this.fasiSoloDOM();
		break;
	case 'ΣΥΜΜΕΤΟΧΗ1':
	case 'ΣΥΜΜΕΤΟΧΗ2':
	case 'ΣΥΜΜΕΤΟΧΗ3':
		this.fasiSimetoxiDOM();
		break;
	case 'ΕΚΤΕΛΕΣΗ':
		this.fasiEktelesiDOM();
		break;
	default:
		Client.fyi.spano(this.fasi + ': άγνωστη φάση');
		break;
	}

	return this;
}

// Στη φάση των δηλώσεων κατά την πλειοδοσία τής αγοράς, εμφανίζεται εικονίδιο
// αναμονής στον παίκτη που έχει σειρά να μιλήσει και διαμορφώνεται κατάλληλα
// η περιοχή δήλωσης και αγοράς του εν λόγω παίκτη, αλλά και τού τρέχοντος
// υποψηφίου τζογαδόρου.

Trapezi.prototype.fasiDilosiDOM = function() {
	var jql, protasi = this.protasiAgoras();

	this.dixeDilosi();
	if (this.tzogadoros) {
		jql = $('#tsoxaPektis' + Prefadoros.tsoxa.thesiMap(this.tzogadoros));
		jql.find('.tsoxaAgora').addClass('tsoxaAgoraYes').html(this.agora.lektikoDOM());
	}

	jql = $('#tsoxaPektis' + Prefadoros.tsoxa.thesiMap(this.epomenos));
	jql.find('.tsoxaPektisBox').append($('<img>').addClass('pexnidiIcon pektisAnamoniIcon').attr({
		title: 'Σκέψη για αγορά',
		src: 'images/endixi/rollStar.gif'
	}));

	jql = jql.find('.tsoxaDilosiBox');
	if (Prefadoros.ego.sinedria.oxiPektis() ||
		(Prefadoros.ego.sinedria.thesi != this.epomenos)) {
		jql.css({display: 'block'}).html(protasi.lektikoDOM());
		return this;
	}

	// Βρισκόμαστε στην πλειοδοσία τής αγοράς και ο παίκτης θα πρέπει να
	// κάνει τη δήλωσή του. Για να γίνει αυτό χρειάζεται κάποιο panel με
	// τις επιτρεπτές δηλώσεις.

	jql.css({display: 'none'});
	this.panelDilosi(protasi);
	return this;
}

// Η μέθοδος "protasiAgoras" επιστρέφει δήλωση αγοράς που θα πρέπει να προταθεί
// στον επόμενο παίκτη που έχει σειρά να μιλήσει στη φάση των δηλώσεων κατά την
// πλειοδοσία τής αγοράς.

Trapezi.prototype.protasiAgoras = function() {
	// Αν υπάρχει ήδη προηγούμενη δήλωση στο τραπέζι, αυτή βρίσκεται στο
	// property "agora" και ο παίκτης που την έχει κάνει βρίσκεται στο
	// property "tzogadoros".

	// Αν, λοιπόν, υπάρχει ήδη δηλωμένη αγορά στο τραπέζι, προετοιμάζουμε
	// τη δήλωση για την επόμενη, ενώ αν δεν υπάρχει αγορά θα πρέπει να
	// προταθεί δήλωση "ΑΜΑ ΜΕΙΝΟΥΝ".

	if (!this.agora) return(this.dilosiCount < 2 ? new Dilosi({grafio:1}) : new Dilosi().setProta());

	// Υπάρχει ήδη δηλωμένη αγορά στο τραπέζι και ζητούμε την επόμενη πρόταση.
	// Αν έχει κλείσει ένας γύρος δηλώσεων, δηλαδή αν όλοι οι παίκτες έχουν
	// ήδη κάνει την πρώτη τους δήλωση, τότε πρέπει να παρέχεται η δυνατότητα
	// παραμονής στο ίδιο επίπεδο αγοράς (δήλωση "ΕΧΩ") στον παίκτη μετά από
	// αυτόν που προτείνει μια νέα αγορά.

	if ((this.dilosiCount >= 3) && this.agora.oxiEdo()) return new Dilosi(this.agora).setEdo();

	protasi = this.agora.epomeniDilosi();

	// Αν μας προέκυψε δήλωση "ΑΜΑ ΜΕΙΝΟΥΝ", αλλά έχουν ήδη προηγηθεί δύο
	// δηλώσεις, τότε η δήλωση "ΑΜΑ ΜΕΙΝΟΥΝ" δεν έχει νόημα, καθώς πρόκειται
	// για τον τελευταίο παίκτη που θα μιλήσει, οπότε μετατρέπουμε τη δήλωση
	// σε δήλωση "ΠΡΩΤΑ".

	if (protasi.isGrafio() && (this.dilosiCount >= 2)) protasi.setProta();
	return protasi;
}

// Οι τρεις παίκτες δήλωσαν πάσο και θα ακολουθήσει νέα διανομή. Μέχρι να γίνει αυτό
// εμφανίζουμε εικονίδιο διανομής στον dealer και τα φύλλα του τζόγου ανοίγουν στο
// κέντρο τού τραπεζιού.

Trapezi.prototype.fasiFlopDOM = function() {
	$('#PXprotos').working('working/ringBlue.gif');
	this.tzogosEmfanisi();
	return this;
}

// Κάποιος από τους παίκτες έχει πλειοδοτήσει και έχει καταστεί τζογαδόρος. Σ' αυτή
// τη φάση τού παιχνιδιού και σ' αυτό το σημείο, ο ενεργός παίκτης πρέπει να είναι
// ο τζογαδόρος και θα πρέπει να παραλάβει τα φύλλα τού τζόγου, να αλλάξει φύλλα και
// να επιλέξει αγορά.

Trapezi.prototype.fasiAlagiDOM = function() {
	var trapezi = this, thesi, pjql;

	this.dixeDilosi();
	thesi = Prefadoros.tsoxa.thesiMap(this.tzogadoros);
	pjql = $('#tsoxaPektis' + thesi);
	pjql.find('.tsoxaPektisBox').append($('<img>').addClass('pexnidiIcon pektisAnamoniIcon').attr({
		src: Prefadoros.ego.isTzogadoros() ? 'images/working/rologaki.gif' : 'images/gears/coolBlue.gif',
		title: 'Σκέψη για αγορά…',
	}));
	pjql.find('.tsoxaAgora').addClass('tsoxaAgoraYes').removeClass('tsoxaAgoraPaso').
	html(this.agora.lektikoDOM()).append($('<img>').attr({
		src: 'images/misc/tzogos.png',
		title: 'Αλλαγή φύλλων',
	}).addClass('tsoxaAgoraTzogosIcon tsoxaAgoraTzogosIcon' + thesi));
	pjql.find('.tsoxaDilosiBox').css({display: 'none'});

	// Ειδικά για τον τζογαδόρο και για τους θεατές της αντίστοιχης θέσης
	// θα πρέπει να γίνουν επιπλέον ενέργειες.

	if (Prefadoros.ego.sinedria.thesi != this.tzogadoros) return this;

	// Θα πρέπει να επανεμφανιστούν τα φύλλα του τζογαδόρου μαζί με τα
	// φύλλα του τζόγου.

	if (this.fila[this.tzogadoros].fila.length == 12) trapezi.dodekadaDOM();

	// Το πάνελ επιλογής αγοράς δημιουργείται μόνο για τον παίκτη που κάθεται στη
	// θέση τού τζογαδόρου και όχι για τους θεατές.

	if (Prefadoros.ego.sinedria.oxiPektis()) return this;

	// Αν το πάνελ επιλογής αγοράς δεν έχει ήδη εμφανιστεί, προχωρούμε στην
	// κατασκευή και την εμφάνισή του στη σελίδα.

	if (!$('#PXpanel').length) trapezi.panelAgoraDOM();

	return this;
}

// Ο τζογαδόρος βρέθηκε σε αδιέξοδο και προτίμησε να βάλει σόλο μέσα την αγορά. Το γεγονός
// γίνεται εμφανές με τις διαδικασίες που περιγράφονται στη function "fasiSoloDOM".

Trapezi.prototype.fasiSoloDOM = function() {
	var thesi, pjql;

	Prefadoros.tsoxa.fyi();
	Client.sound.solo();
	$('#PXprotos').working('working/ringBlue.gif');
	thesi = Prefadoros.tsoxa.thesiMap(this.tzogadoros);
	pjql = $('#tsoxaPektis' + thesi);
	pjql.find('.tsoxaAgoraTzogosIcon').remove();
	pjql.find('.tsoxaAgora').removeClass('tsoxaAgoraYes').empty();

	// Αποτυπώνουμε την αγορά εκκίνησης στο πεδίο δηλώσεων στην
	// περιοχή τού τζογαδόρου.

	pjql.find('.tsoxaDilosiBox').html(new Dilosi({
		xroma: this.ekinisi.xroma,
		bazes: this.ekinisi.bazes,
	}).lektikoDOM()).addClass('tsoxaDilosiSolo').css({display: 'block'});

	// Θα κάνουμε εμφανές τοο γεγονός τής σολαρίας στην περιοχή
	// τού τζογαδόρου.

	pjql.find('.tsoxaPektisBox').

	// Εμφανίζουμε εικονίδιο σολαρίας στην περιοχή του τζογαδόρου
	// και το αυξομειώνουμε όσον αφορά στο μέγεθος.

	append($('<img>').
	addClass('pexnidiIcon pektisSoloIcon pektisSoloIcon' + thesi).attr({
		src: 'images/misc/solo.png',
	}).anadisi().delay(10).animate({
		top: '-=80px',
		left: '-=90px',
		width: '+=200px',
	}, 600, 'easeOutBounce').delay(2000).fadeOut(1000)).

	// Παράλληλα, αλλάζουμε το χρώμα τού περιγράμματος στην περιοχή τού
	// τζογαδόρου και παίζουμε με αυτό το χρώμα για λίγο.

	css({
		borderColor: '#FF0000',
	}).animate({
		borderColor: '#000080',
	}, 3000, 'easeOutBounce', function() {
		// Επαναφέρουμε στο χρώμα της κλάσης CSS.
		$(this).css({borderColor: ''});
	});

	return this;
}

// Στη φάση των δηλώσεων συμμετοχής, εμφανίζεται εικονίδιο αναμονής στον παίκτη
// που έχει σειρά να μιλήσει και διαμορφώνεται κατάλληλα η περιοχή δήλωσης τού
// εν λόγω παίκτη.

Trapezi.prototype.fasiSimetoxiDOM = function() {
	var jql;

	switch (this.fasi) {
	case 'ΣΥΜΜΕΤΟΧΗ1':
		$('#tsoxaPektis' + Prefadoros.tsoxa.thesiMap(this.tzogadoros)).find('.tsoxaAgora').css({
			backgroundColor: '#FFCC00',
		}).html(this.agora.lektikoDOM('dilosi')).animate({
			backgroundColor: '#FFFF99',
		}, 400, 'easeOutBounce', function() {
			$(this).css({
				backgroundColor: '',
			});
		});
		Client.sound.agora();
		break;
	}

	this.dixeSimetoxi();
	jql = $('#tsoxaPektis' + Prefadoros.tsoxa.thesiMap(this.epomenos));
	jql.find('.tsoxaPektisBox').append($('<img>').addClass('pexnidiIcon pektisAnamoniIcon').attr({
		title: 'Σκέψη για συμμετοχή',
		src: Prefadoros.ego.isEpomenosPektis() ?
			'images/endixi/rollStar.gif' : 'images/endixi/erotimatiko.gif'
	}));

	jql = jql.find('.tsoxaDilosiBox');
	if (Prefadoros.ego.sinedria.oxiPektis()) return this;
	if (Prefadoros.ego.sinedria.thesi != this.epomenos) return this;

	// Βρισκόμαστε στη φάση της επιλογής συμμετοχής και ο παίκτης θα πρέπει
	// να κάνει τη δήλωσή του. Για να γίνει αυτό χρειάζεται κάποιο panel με
	// τις επιτρεπτές δηλώσεις συμμετοχής.

	jql.css({display: 'none'});
	this.panelSimetoxi();
	return this;
}

Trapezi.prototype.fasiEktelesiDOM = function() {
	this.dixeSimetoxi();
	jql = $('#tsoxaPektis' + Prefadoros.tsoxa.thesiMap(this.epomenos));
	jql.find('.tsoxaPektisBox').append($('<img>').addClass('pexnidiIcon pektisAnamoniIcon').attr({
		title: 'Σκέψη για φύλλο',
		src: Prefadoros.ego.isEpomenosPektis() ?
			'images/endixi/rollStar.gif' : 'images/endixi/balitsa.gif'
	}));
	return this;
}

Trapezi.prototype.dixeDilosi = function() {
	var thesi;

	for (thesi in Prefadoros.thesiValid) {
		$('#tsoxaPektis' + Prefadoros.tsoxa.thesiMap(thesi)).find('.tsoxaDilosiBox').css({
			display: this.dilosiPaso(thesi) ? 'block' : 'none',
		});
	}

	return this;
}

Trapezi.prototype.dixeSimetoxi = function() {
	var thesi, pjql, bjql, djql;

	for (thesi in Prefadoros.thesiValid) {
		pjql = $('#tsoxaPektis' + Prefadoros.tsoxa.thesiMap(thesi));
		bjql = pjql.find('.tsoxaPektisBox');
		djql = pjql.find('.tsoxaDilosiBox');

		if (!this.simetoxi.hasOwnProperty(thesi)) {
			djql.css({display: 'none'});
			continue;
		}

		djql.text(this.simetoxi[thesi].simetoxi).css({display: 'block'});
		if (this.simetoxi[thesi].isPaso()) {
			switch (this.fasi) {
			case 'ΣΥΜΜΕΤΟΧΗ1':
			case 'ΣΥΜΜΕΤΟΧΗ2':
			case 'ΣΥΜΜΕΤΟΧΗ3':
				break;
			default:
				bjql.addClass('diagramisi');
				break;
			}
			djql.addClass('tsoxaSimetoxiPaso');
			continue;
		}

		djql.removeClass('tsoxaSimetoxiPaso tsoxaSimetoxiPezo');

		if (this.simetoxi[thesi].isPezo() ||
			this.simetoxi[thesi].isVoithao() ||
			this.simetoxi[thesi].isMonos()) {
			djql.addClass('tsoxaSimetoxiPezo');
			continue;
		}

		if (this.simetoxi[thesi].isMazi()) {
			djql.addClass('tsoxaSimetoxiMazi');
			if (!bjql.find('.tsoxaMaziIcon').length) $('<img>').attr({
				title: 'Πάμε μαζί!',
				src: 'images/misc/mazi.png',
			}).addClass('tsoxaMaziIcon').appendTo(bjql);
			continue;
		}
	}

	return this;
}
